﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EditorTag
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCargar_Click(object sender, EventArgs e)
        {
            //folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyMusic;
            DialogResult result = folderBrowserDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                lblRuta.Text = folderBrowserDialog1.SelectedPath;
            }
            CargarArchivos();
            txtFiltro.Enabled = true;
        }

        private void CargarArchivos()
        {
            lbArchivos.Items.Clear();
            DirectoryInfo oDir = new DirectoryInfo(lblRuta.Text);
            foreach (var file in oDir.GetFiles("*.mp3"))
            {
                lbArchivos.Items.Add(file.Name);
            }
        }

        private void btnGenerarTags_Click(object sender, EventArgs e)
        {
            if(txtNombreArchivo.Text != "")
            {
                var texto = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(txtNombreArchivo.Text.ToLower());
                txtNombreArchivo.Text = texto;
                var data = txtNombreArchivo.Text.Split('-');
                if (data.Count() > 1)
                {
                    txtArtista.Text = data[0];
                    txtCancion.Text = data[1];
                }
            }
        }

        private void btnGuardarTag_Click(object sender, EventArgs e)
        {
            TagLib.File file = TagLib.File.Create(lblRuta.Text + "\\" + lbArchivos.SelectedItem);
            file.Tag.Title = txtCancion.Text;
            file.Tag.Performers = new[] { txtArtista.Text };
            file.Tag.Album = txtAlbum.Text;
            file.Save();
            btnGuardarTag.Enabled = false;
            btnRenombrar.Enabled = true;
        }

        private void lbArchivos_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            Limpiar();
            try
            {
                TagLib.File file = TagLib.File.Create(lblRuta.Text + "\\" + lbArchivos.SelectedItem);
                lblArchivo.Text = lbArchivos.SelectedItem.ToString();
                if (file.Tag.Performers.Count() != 0)
                    lblArtista.Text = file.Tag.Performers[0];
                else
                    lblArtista.Text = "";

                string nombre = lbArchivos.SelectedItem.ToString();
                char separador = txtSeparador.Text != "" ? txtSeparador.Text[0] : ' ';  
                var data = nombre.Replace(".mp3", "").Split(separador);
                foreach (var s in data)
                {
                    lbNombres.Items.Add(s);
                }
                lblCancion.Text = file.Tag.Title;
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.ToString());
            }
        }

        private void lbNombres_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (txtNombreArchivo.Text == "")
                txtNombreArchivo.Text = (string) lbNombres.SelectedItem;
            else
                txtNombreArchivo.Text += " " + lbNombres.SelectedItem;
        }

        private void btnRenombrar_Click(object sender, EventArgs e)
        {
            string original = lblRuta.Text + "\\" + lbArchivos.SelectedItem;
            string nuevo = lblRuta.Text + "\\" + txtNombreArchivo.Text + ".mp3";
            File.Move(original, "temp.mp3");
            if (File.Exists(nuevo))
            {
                nuevo = nuevo.Replace(".mp3", "") + " [Duplicado].mp3";
                MessageBox.Show("Archivo ya existe, se asigna nuevo nombre: " + nuevo + ".mp3");
            }
            File.Move("temp.mp3", nuevo);
            CargarArchivos();

            Limpiar();
        }

        private void Limpiar()
        {
            lbNombres.Items.Clear();
            txtNombreArchivo.Text = "";
            txtArtista.Text = "";
            txtCancion.Text = "";
            txtAlbum.Text = "";
            txtFiltro.Text = "";
            btnGuardarTag.Enabled = true;
            btnRenombrar.Enabled = false;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (txtFiltro.Text.Length > 3)
            {
                string myString = txtFiltro.Text;
                int index = lbArchivos.FindString(myString, -1);
                if (index != -1)
                {
                    lbArchivos.SetSelected(index, true);
                }
            }
        }

        private void btnAgregarGuion_Click(object sender, EventArgs e)
        {
            if (txtNombreArchivo.Text != "")
                txtNombreArchivo.Text += " - ";
        }



    }
}
